iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
自我挑戰組

純新手學習 JavaScript系列 第 21

新手學習JavaScript:day21 - Max Consecutive Ones

  • 分享至 

  • xImage
  •  

嗨,大家好!刷題來到第三天了,一樣直接來看今天的題目吧!

/*
Given a binary array, find the maximum number of consecutive 1s in this array.

Example 1:
Input: [1,1,0,1,1,1]
Output: 3
Explanation: The first two digits or the last three digits are consecutive 1s.
    The maximum number of consecutive 1s is 3.
Note:

The input array will only contain 0 and 1.
The length of input array is a positive integer and will not exceed 10,000
*/
var findMaxConsecutiveOnes = function(nums) {

}

這題一開始輸入會給一個二進位的陣列,我們必須找出在這個陣列中,最多的連續出現1,是幾個1。

思考:

  1. 連續的1是不會有0的出現(廢話),所以可以透過兩個0之間來計算有多少1。
  2. 所以我先宣告一個空陣列來存放每兩個零之間有多少1,以及宣告一個變數來計算次數。
var findMaxConsecutiveOnes = function(nums) {
  let result = []
  let count = 0
}
  1. 利用for迴圈來將陣列元素一個個來做比對與計算,如果是1就讓count 加1,如果遇到0就將count結果丟到陣列中,並且讓count歸0。
var findMaxConsecutiveOnes = function(nums) {
  let result = []
  let count = 0
  for(let i = 0; i < nums.length; i++){
    if(nums[i] === 1){
      count += 1
    }
   if(nums[i] === 0){
     result.push(count)
     count = 0
   }
  }
}
  1. 這樣會遇到一個問題,我們不知道最後一個數字是什麼,不是0的話會少計算,所以,在一開始陣列的最後面塞一個0給它。最後我們只要找出result裡面最大的數字就是題目要的結果了。
var findMaxConsecutiveOnes = function(nums) {
  nums.push(0)
  let result = []
  let count = 0
  for(let i = 0; i < nums.length; i++){
    if(nums[i] === 1){
      count += 1
    }
   if(nums[i] === 0){
     result.push(count)
     count = 0
   }
  }
   return Math.max(...result)
}

以上是今天內容!寫法上有非常大的進步空間。如果有哪位大大路過經過,還請多多賜教。


上一篇
新手學習JavaScript:day20 - Sum of Even Numbers After Queries
下一篇
新手學習JavaScript:day22 - Two Sum
系列文
純新手學習 JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
janshawn
iT邦新手 5 級 ‧ 2020-10-07 11:13:17
//解一
var findMaxConsecutiveOnes = function (nums) {
    var maxCount = 0;//連續出現最大次數
    var count = 0;//累加次數
    nums.forEach(num => {
        count = (num == 1) ? count += 1 : 0
        maxCount = (count > maxCount) ? count : maxCount;
    });
    return maxCount;
}
//解二
var findMaxConsecutiveOnes = function (nums) {
    return Math.max(...nums.join("").split(/0+/).map(text => text.length));
}

給你參考參考~~~

我要留言

立即登入留言